package com.njbw.user.designPattern.abstractFactoryPattern.easy;

/**
 * 抽象工厂其实就是再往上抽取一层进行管理的方式
 */
public class AbstractFactoryPatternDemo {

    public static void main(String[] args) {

        // 获取形状工厂
        AbstractFactory shapeFactory = FactoryProducer.getFactory("Shape");
        if (shapeFactory == null) return;

        // 获取形状为 Circle 的对象
        Shape circle = shapeFactory.getShape("Circle");
        // 调用 Circle 的 draw 方法
        circle.draw();

        // 获取形状为 Rectangle 的对象
        Shape rectangle = shapeFactory.getShape("Rectangle");
        // 调用 Rectangle 的 draw 方法
        rectangle.draw();

        // 获取形状为 Square 的对象
        Shape square = shapeFactory.getShape("Square");
        // 调用 Square 的 draw 方法
        square.draw();

        // 获取颜色工厂
        AbstractFactory colorFactory = FactoryProducer.getFactory("Color");
        if (colorFactory == null) return;

        // 获取颜色为 Red 的对象
        Color red = colorFactory.getColor("Red");
        // 调用 Red 的 fill 方法
        red.fill();

        // 获取颜色为 Blue 的对象
        Color blue = colorFactory.getColor("Blue");
        // 调用 Red 的 fill 方法
        blue.fill();

        // 获取颜色为 Green 的对象
        Color green = colorFactory.getColor("Green");
        // 调用 Red 的 fill 方法
        green.fill();
    }
}
